Kerry Back
\[p = \frac{r-d}{u-d} = \frac{e^{r_f \Delta t} - e^{-\sigma \Delta t}}{e^{\sigma \Delta t} - e^{-\sigma \Delta t}}\]
\[\frac{e^{(r_f-q) \Delta t} - e^{-\sigma \Delta t}}{e^{\sigma \Delta t} - e^{-\sigma \Delta t}}\]
def putBS(S, K, T, sigma, r, q=0):
d1 = np.log(S/K) + (r-q+0.5*sigma**2)*T
d1 /= sigma*np.sqrt(T)
d2 = d1 - sigma*np.sqrt(T)
N1 = norm.cdf(-d1)
N2 = norm.cdf(-d2)
return np.exp(-r*T)*K*N2 - np.exp(-q*T)*S*N1